﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using QuanLyHocPhi.Model;

namespace QuanLyHocPhi.BLL
{
    partial class BizLopGoc
    {
        // Lấy danh sách các năm tuyển sinh dựa vào danh sách lớp gốc
        public static List<string> GetListNamTuyenSinh()
        {
            using (var context = new QLHPEntities())
            {
                var lst = context.LopGocDbSet
                    .OrderByDescending(e => e.NamTuyenSinh)
                    .Select(e => e.NamTuyenSinh)
                    .Distinct()
                    .ToList();
                return lst;
            }
        }

        public static void DeleteLopGoc(string pMaLopGoc)
        {
            using (var context = new QLHPEntities())
            {
                var oLopGoc = context.LopGocDbSet.Where(e => e.MaLopGoc == pMaLopGoc).FirstOrDefault();
                if (oLopGoc == null)
                    throw new Exception(string.Format("Lớp cần xoá không còn tồn tại trên hệ thống"));
                context.LopGocDbSet.Remove(oLopGoc);
                context.SaveChanges();
            }
        }

        public static void AddLopGoc(LopGoc lop)
        {
            using (var context = new QLHPEntities())
            {
                var oLop = context.LopGocDbSet.Where(e => e.TenLopGoc == lop.TenLopGoc).FirstOrDefault();
                if (oLop != null)
                    throw new Exception("Lớp đã tồn tại trên hệ thống");
                context.LopGocDbSet.Add(lop);
                context.SaveChanges();
            }
        }

        public static void UpdateLopGoc(LopGoc lop)
        {
            using (var context = new QLHPEntities())
            {
                var oLop = context.LopGocDbSet.Where(e => e.TenLopGoc == lop.TenLopGoc && e.MaLopGoc != lop.MaLopGoc).FirstOrDefault();
                if (oLop != null)
                    throw new Exception("Không được đặt tên 2 lớp trùng nhau");
                oLop = context.LopGocDbSet.Where(e => e.MaLopGoc == lop.MaLopGoc).FirstOrDefault();
                if (oLop == null)
                    throw new Exception("Lớp cần sửa không còn tồn tại trên hệ thống. Hãy nạp lại dữ liệu");
                oLop.TenLopGoc = lop.TenLopGoc;
                oLop.MaLoaiHinhDaoTao = lop.MaLoaiHinhDaoTao;
                oLop.NamTuyenSinh = lop.NamTuyenSinh;
                context.SaveChanges();
            }
        }

        public static LopGoc GetLopGoc(string pMaLopGoc)
        {
            using (var context = new QLHPEntities())
            {
                return context.LopGocDbSet.Where(e => e.MaLopGoc == pMaLopGoc).FirstOrDefault();
            }
        }

        /// <summary>
        /// Lấy danh sách lớp gốc (bao gồm cả LoaiHinh)
        /// </summary>
        /// <param name="loaiHinh"></param>
        /// <param name="namTuyenSinh"></param>
        /// <returns></returns>
        public static List<LopGoc> GetListLopGoc(LoaiHinhDaoTao loaiHinh, string namTuyenSinh)
        {
            List<LopGoc> lst = null;
            using (var context = new QLHPEntities())
            {
                if (loaiHinh == null)
                {
                    if (namTuyenSinh.IsNullOrEmpty())
                        lst = context.LopGocDbSet.Include("LoaiHinhDaoTao").ToList();
                    else
                        lst = context.LopGocDbSet.Include("LoaiHinhDaoTao").
                            Where(e => e.NamTuyenSinh == namTuyenSinh).ToList();
                }
                else
                {
                    if (namTuyenSinh.IsNullOrEmpty())
                        lst = context.LopGocDbSet.Include("LoaiHinhDaoTao").
                            Where(e => e.MaLoaiHinhDaoTao == loaiHinh.MaLoaiHinh).ToList();
                    else
                        lst = context.LopGocDbSet.Include("LoaiHinhDaoTao").
                            Where(e => e.MaLoaiHinhDaoTao == loaiHinh.MaLoaiHinh && e.NamTuyenSinh == namTuyenSinh).ToList();
                }
            }
            return lst;
        }
    }
}
